#ifndef MATH_H
#define MATH_H

#include "Object.h"
#include <math.h>
#include <stdio.h>

class Math
{
public:
	inline static double sin(double x) { return std::sin(x); }
	inline static double cos(double x) { return std::cos(x); }
	inline static double tan(double x) { return std::tan(x); }

	inline static double asin(double x) { return std::asin(x); }
	inline static double acos(double x) { return std::acos(x); }
	inline static double atan(double x) { return std::atan(x); }
	inline static double atan2(double x,double y) { return std::atan2(x,y); }

	inline static double exp(double x) { return std::exp(x); }
	inline static double log(double x) { return std::log(x); }
	inline static double log10(double x) { return std::log10(x); }

	inline static double sqrt(double x) { return std::sqrt(x); }
	inline static double min(double x,double y) { return x < y ? x : y; }
	inline static double max(double x,double y) { return x > y ? x : y; }

	inline static double pow(double x,double y) { return std::pow(x,y); }
	
	inline static integer random() { return (integer)rand(); }
	inline static integer random(integer a, integer b) { return b - ((integer)rand() % (b - a + 1)); }

	template <class T>
	inline static T abs(T o) { return std::abs(o); } 
	inline static double pi() { return 3.1415926535897932384626433832795028841968; }
	inline static double e() { return 2.71828182845904523536; }
};

#endif